Changed: Prevent possible FileStore Deadlocks on GC By Preventing Yielding to external code. #2063
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Very quick patch.
Updating the DataBase's file copy of the FileStore objects interacts with external non-GC components,
such as MnemonicDB. This may cause us to yield to external code that could touch the FileStore lock.
To avoid deadlocks, we should prevent this from happening if possible. This is why we release
store.Lock()
earlyand instead put another lock on the GC operation itself.
Long term, we may want to update IFileStore a bit to be resilient when opening streams. For additional comments see:
#2058 (comment)
In addition, we still need a non-blocking Commit in MMDB; I put the details surrounding that in the code itself.